
<!DOCTYPE HTML>
<html lang="" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>SPI定制化 · GitBook</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        
        
        
    
    <link rel="stylesheet" href="gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
                
            
                
                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
                
            
        

    

    
        
    
        
    
        
    
        
    
        
    
        
    

        
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">

    
    
    <link rel="prev" href="12.html" />
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="Type to search" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    

    

    
        
        
    
        <li class="chapter " data-level="1.1" data-path="./">
            
                <a href="./">
            
                    
                    前言
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" >
            
                <span>
            
                    
                    [第一章 系统介绍]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.2.1" data-path="1.html">
            
                <a href="1.html">
            
                    
                    系统介绍
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.2" data-path="2.html">
            
                <a href="2.html">
            
                    
                    功能特点
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.3" >
            
                <span>
            
                    
                    [第二章 快速上手]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.3.1" data-path="3.html">
            
                <a href="3.html">
            
                    
                    源码地址
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.2" data-path="4.html">
            
                <a href="4.html">
            
                    
                    服务部署
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.3" data-path="5.html">
            
                <a href="5.html">
            
                    
                    集成开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3.4" data-path="6.html">
            
                <a href="6.html">
            
                    
                    源码测试
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.4" >
            
                <span>
            
                    
                    [第三章 架构分析]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.4.1" data-path="7.html">
            
                <a href="7.html">
            
                    
                    系统架构
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.2" data-path="8.html">
            
                <a href="8.html">
            
                    
                    服务依赖关系
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.3" data-path="9.html">
            
                <a href="9.html">
            
                    
                    协议格式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.4" data-path="10.html">
            
                <a href="10.html">
            
                    
                    消息类型
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.5" data-path="11.html">
            
                <a href="11.html">
            
                    
                    系统配置
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.6" data-path="12.html">
            
                <a href="12.html">
            
                    
                    功能模块
            
                </a>
            

            
        </li>
    
        <li class="chapter active" data-level="1.4.7" data-path="13.html">
            
                <a href="13.html">
            
                    
                    SPI定制化
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.5" >
            
                <span>
            
                    
                    [第四章 深度进阶]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.5.1" data-path="14.html">
            
                <a href="14.html">
            
                    
                    秘钥交换
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.2" data-path="15.html">
            
                <a href="15.html">
            
                    
                    握手及快速重连
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.3" data-path="16.html">
            
                <a href="16.html">
            
                    
                    绑定用户
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.4" data-path="17.html">
            
                <a href="17.html">
            
                    
                    消息推送流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.5" data-path="18.html">
            
                <a href="18.html">
            
                    
                    HTTP代理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.6" data-path="19.html">
            
                <a href="19.html">
            
                    
                    消息分发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.7" data-path="20.html">
            
                <a href="20.html">
            
                    
                    消息序列化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.8" data-path="21.html">
            
                <a href="21.html">
            
                    
                    消息加密与压缩
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.9" data-path="22.html">
            
                <a href="22.html">
            
                    
                    线程池配置与定制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.10" data-path="23.html">
            
                <a href="23.html">
            
                    
                    上行PUSH
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.11" data-path="24.html">
            
                <a href="24.html">
            
                    
                    广播推送与流控
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.12" data-path="25.html">
            
                <a href="25.html">
            
                    
                    广播推送条件过滤
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.13" data-path="26.html">
            
                <a href="26.html">
            
                    
                    消息ACK
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.14" data-path="27.html">
            
                <a href="27.html">
            
                    
                    离线消息
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.15" data-path="28.html">
            
                <a href="28.html">
            
                    
                    服务端启动流程分析
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.16" data-path="29.html">
            
                <a href="29.html">
            
                    
                    日志模块性能优化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5.17" data-path="30.html">
            
                <a href="30.html">
            
                    
                    JVM监控与性能分析
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.6" >
            
                <span>
            
                    
                    [第五章 关联服务]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.6.1" data-path="31.html">
            
                <a href="31.html">
            
                    
                    Alloc服务
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.6.2" data-path="32.html">
            
                <a href="32.html">
            
                    
                    MPNS
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.7" >
            
                <span>
            
                    
                    [第六章 SDK接入]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.7.1" data-path="33.html">
            
                <a href="33.html">
            
                    
                    服务端SDK
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.2" data-path="34.html">
            
                <a href="34.html">
            
                    
                    Android SDK
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.3" data-path="35.html">
            
                <a href="35.html">
            
                    
                    MPushClient(Java)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.4" data-path="36.html">
            
                <a href="36.html">
            
                    
                    MPushClient(Swift)
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7.5" data-path="37.html">
            
                <a href="37.html">
            
                    
                    MPushClient(Obj-C)
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.8" >
            
                <span>
            
                    
                    [第七章 常见问题]
            
                </span>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.8.1" data-path="38.html">
            
                <a href="38.html">
            
                    
                    常见问题
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.8.2" data-path="39.html">
            
                <a href="39.html">
            
                    
                    系统压测
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            Published with GitBook
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href="." >SPI定制化</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <h1 id="spi&#x5B9A;&#x5236;&#x5316;">SPI&#x5B9A;&#x5236;&#x5316;</h1>
<h3 id="&#x4EC0;&#x4E48;&#x662F;spi">&#x4EC0;&#x4E48;&#x662F;<code>SPI</code></h3>
<p>   &#x5EFA;&#x8BAE;&#x76F4;&#x63A5;&#x767E;&#x5EA6; <code>java spi</code>, &#x5B98;&#x65B9;&#x4ECB;&#x7ECD;: <a href="http://docs.oracle.com/javase/tutorial/sound/SPI-intro.html" target="_blank">http://docs.oracle.com/javase/tutorial/sound/SPI-intro.html</a></p>
<h3 id="mpush-&#x4F7F;&#x7528;spi&#x7684;&#x76EE;&#x7684;">mpush &#x4F7F;&#x7528;SPI&#x7684;&#x76EE;&#x7684;</h3>
<p>   &#x80AF;&#x5B9A;&#x662F;&#x4E3A;&#x4E86;&#x6269;&#x5C55;&#x6027;&#xFF0C;&#x5728;&#x4E0D;&#x60F3;&#x4FEE;&#x6539;&#x6E90;&#x7801;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x53BB;&#x66FF;&#x6362;&#x7CFB;&#x7EDF;&#x539F;&#x6709;&#x7684;&#x5B9E;&#x73B0;&#xFF0C;&#x4EE3;&#x4EF7;&#x6700;&#x5C0F;&#x4E5F;&#x6700;&#x7075;&#x6D3B;&#x3002;</p>
<h3 id="mpush&#x76EE;&#x524D;&#x652F;&#x6301;&#x7684;spi&#x5217;&#x8868;">mpush&#x76EE;&#x524D;&#x652F;&#x6301;&#x7684;SPI&#x5217;&#x8868;</h3>
<p>   &#x6240;&#x6709;&#x53D7;&#x652F;&#x6301;&#x7684;SPI&#x90FD;&#x5728;<code>mpuhs-api</code>&#x6A21;&#x5757;&#x7684;<code>com.mpush.api.spi</code>&#x5305;&#x4E0B;&#x9762;&#x3002;</p>
<ul>
<li><code>ServerEventListenerFactory</code> &#x76D1;&#x542C;Server &#x4EA7;&#x751F;&#x7684;&#x76F8;&#x5173;&#x4E8B;&#x4EF6;</li>
<li><code>BindValidatorFactory</code> &#x7ED1;&#x5B9A;&#x7528;&#x6237;&#x8EAB;&#x4EFD;&#x662F;&#x6821;&#x9A8C;&#x7528;&#x6237;&#x8EAB;&#x4EFD;&#x662F;&#x5426;&#x5408;&#x6CD5;</li>
<li><code>ClientClassifierFactory</code> &#x540C;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x591A;&#x8BBE;&#x5907;&#x767B;&#x5F55;&#x4E92;&#x8E22;&#x7B56;&#x7565;&#xFF0C;&#x9ED8;&#x8BA4;Android&#x548C;ios&#x4F1A;&#x4E92;&#x8E22;</li>
<li><code>PushHandlerFactory</code> &#x63A5;&#x6536;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001;&#x5230;&#x670D;&#x52A1;&#x7AEF;&#x7684;&#x4E0A;&#x884C;&#x63A8;&#x9001;&#x6D88;&#x606F;</li>
<li><code>ExecutorFactory</code> &#x6574;&#x4E2A;&#x7CFB;&#x7EDF;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;&#x5DE5;&#x5382;&#xFF0C;&#x53EF;&#x4EE5;&#x6309;&#x81EA;&#x5DF1;&#x7684;&#x7B56;&#x7565;&#x521B;&#x5EFA;&#x7EBF;&#x7A0B;&#x6C60;</li>
<li><code>CacheManagerFactory</code> &#x7CFB;&#x7EDF;&#x4F7F;&#x7528;&#x7684;&#x7F13;&#x5B58;&#x5B9E;&#x73B0;&#xFF0C;&#x9ED8;&#x8BA4;&#x662F;redis&#xFF0C;&#x652F;&#x6301;&#x81EA;&#x5B9A;&#x4E49;</li>
<li><code>MQClientFactory</code> &#x7CFB;&#x7EDF;&#x4F7F;&#x7528;&#x7684;MQ&#x5B9E;&#x73B0;&#xFF0C;&#x9ED8;&#x8BA4;&#x662F;redis&#x7684;pub/sub&#xFF0C;&#x652F;&#x6301;&#x81EA;&#x5B9A;&#x4E49;</li>
<li><code>ServiceRegistryFactory</code> &#x670D;&#x52A1;&#x6CE8;&#x518C;&#x7EC4;&#x4EF6;&#xFF0C;&#x9ED8;&#x8BA4;&#x5B9E;&#x73B0;&#x662F;zookeeper&#xFF0C;&#x652F;&#x6301;&#x81EA;&#x5B9A;&#x4E49;</li>
<li><code>ServiceDiscoveryFactory</code> &#x670D;&#x52A1;&#x53D1;&#x73B0;&#x7EC4;&#x4EF6;&#xFF0C;&#x9ED8;&#x8BA4;&#x5B9E;&#x73B0;&#x662F;zookeeper&#xFF0C;&#x652F;&#x6301;&#x81EA;&#x5B9A;&#x4E49;</li>
<li><code>PushListenerFactory</code> &#x6D88;&#x606F;&#x6765;&#x6E90;&#x81EA;&#x5B9A;&#x4E49;&#xFF0C;&#x9ED8;&#x8BA4;&#x4F7F;&#x7528;Gateway&#x6A21;&#x5757;&#xFF0C;&#x652F;&#x6301;&#x81EA;&#x5B9A;&#x4E49;&#xFF0C;&#x6BD4;&#x5982;&#x4F7F;&#x7528;MQ<h3 id="&#x5F00;&#x53D1;&#x6D41;&#x7A0B;">&#x5F00;&#x53D1;&#x6D41;&#x7A0B;</h3>
</li>
<li>&#x65B0;&#x5EFA;&#x4E00;&#x4E2A;maven&#x5DE5;&#x7A0B;&#xFF0C;&#x5E76;&#x52A0;&#x5165;mpush-api&#x6A21;&#x5757;&#x7684;&#x4F9D;&#x8D56;</li>
<li>&#x5B9E;&#x73B0;&#x8981;&#x5B9A;&#x5236;&#x7684;&#x63A5;&#x53E3;&#x548C;&#x5176;&#x5BF9;&#x5E94;&#x7684;Factory</li>
<li>&#x5728;resources&#x76EE;&#x5F55;&#x4E0B;&#x521B;&#x5EFA;META-INF.services&#x76EE;&#x5F55;</li>
<li>&#x521B;&#x5EFA;&#x540D;&#x5B57;&#x4E3A;<code>com.mpush.api.spi.xxx.XXXFactory</code>&#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x5373;&#x5BF9;&#x5E94;&#x7684;&#x63A5;&#x53E3;&#x540D;</li>
<li>&#x6587;&#x4EF6;&#x7684;&#x5185;&#x5BB9;&#x4E3A;&#x5B9E;&#x73B0;&#x7C7B;&#x7684;&#x5168;&#x540D;(packageName+className)</li>
<li>&#x901A;&#x8FC7;mvn&#x6253;&#x6210;jar&#x5305;&#xFF0C;&#x5E76;&#x628A;&#x5176;&#x653E;&#x5230;mpush/lib&#x76EE;&#x5F55;</li>
<li>&#x91CD;&#x542F;mpush server &#x5C31;&#x4F1A;&#x4F18;&#x5148;&#x52A0;&#x8F7D;&#x7528;&#x6237;&#x63D0;&#x4F9B;&#x7684;&#x5B9E;&#x73B0;&#x6765;&#x8986;&#x76D6;&#x539F;&#x6709;&#x7684;&#x9ED8;&#x8BA4;&#x5B9E;&#x73B0;</li>
</ul>

                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="12.html" class="navigation navigation-prev navigation-unique" aria-label="Previous page: 功能模块">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"SPI定制化","level":"1.4.7","depth":2,"next":{"title":"[第四章 深度进阶]","level":"1.5","depth":1,"ref":"","articles":[{"title":"秘钥交换","level":"1.5.1","depth":2,"path":"14.md","ref":"14.md","articles":[]},{"title":"握手及快速重连","level":"1.5.2","depth":2,"path":"15.md","ref":"15.md","articles":[]},{"title":"绑定用户","level":"1.5.3","depth":2,"path":"16.md","ref":"16.md","articles":[]},{"title":"消息推送流程","level":"1.5.4","depth":2,"path":"17.md","ref":"17.md","articles":[]},{"title":"HTTP代理","level":"1.5.5","depth":2,"path":"18.md","ref":"18.md","articles":[]},{"title":"消息分发","level":"1.5.6","depth":2,"path":"19.md","ref":"19.md","articles":[]},{"title":"消息序列化","level":"1.5.7","depth":2,"path":"20.md","ref":"20.md","articles":[]},{"title":"消息加密与压缩","level":"1.5.8","depth":2,"path":"21.md","ref":"21.md","articles":[]},{"title":"线程池配置与定制","level":"1.5.9","depth":2,"path":"22.md","ref":"22.md","articles":[]},{"title":"上行PUSH","level":"1.5.10","depth":2,"path":"23.md","ref":"23.md","articles":[]},{"title":"广播推送与流控","level":"1.5.11","depth":2,"path":"24.md","ref":"24.md","articles":[]},{"title":"广播推送条件过滤","level":"1.5.12","depth":2,"path":"25.md","ref":"25.md","articles":[]},{"title":"消息ACK","level":"1.5.13","depth":2,"path":"26.md","ref":"26.md","articles":[]},{"title":"离线消息","level":"1.5.14","depth":2,"path":"27.md","ref":"27.md","articles":[]},{"title":"服务端启动流程分析","level":"1.5.15","depth":2,"path":"28.md","ref":"28.md","articles":[]},{"title":"日志模块性能优化","level":"1.5.16","depth":2,"path":"29.md","ref":"29.md","articles":[]},{"title":"JVM监控与性能分析","level":"1.5.17","depth":2,"path":"30.md","ref":"30.md","articles":[]}]},"previous":{"title":"功能模块","level":"1.4.6","depth":2,"path":"12.md","ref":"12.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["livereload"],"pluginsConfig":{"livereload":{},"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"13.md","mtime":"2023-05-21T16:15:49.922Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2023-06-26T16:20:41.295Z"},"basePath":".","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="gitbook/gitbook.js"></script>
    <script src="gitbook/theme.js"></script>
    
        
        <script src="gitbook/gitbook-plugin-livereload/plugin.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-search/search.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
        
    
        
        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    

    </body>
</html>

